<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>
Console do BeanShell
</title>
</head>
<body bgcolor="#ffffff">
<h1>Console do BeanShell</h1>
<h3>Introdução / o que é o BeanShell</h3>
<p>
O <a href="http://www.beanshell.org/">BeanShell</a> é um shell interativo de Java que pode ser usado para executar scripts BeanShell. Esses scripts são uma forma simplificada de Java que usam muitos elementos de sintaxe Java, mas em um formato mais simples de script. Todo o código Java é também válido como código BeanShell.
A integração do BeanShell no OWASP ZAP permite que você escreva scripts usando as funções ZAP e data sets. Isto pode ser um recurso muito poderoso para a análise de aplicações web.
</p>
<h3>Console BeanShell</h3>
<p>
O console é iniciado a partir do menu ferramentas e contém uma tela dividida, onde a metade superior é o console BeanShell interativo e a parte inferior metade é um simples editor de texto. Para scripts complexos, sugerimos o uso de um editor de Java.  Scripts podem ser carregados, salvos e avaliados a partir do editor.
</p>
<p>
Quando o BeanShell é aberto, vários objetos do ZAP estão disponível para uso, ou seja:
<ul>
<li>o <i>modelo</i> singleton, através do objeto denominado <b><i>modelo</i></b></li>
<li>a  <i>árvore</i> de sites atuais através do objeto  <b><i>sites</i></b></li>
<li>uma instância de <i>HttpSender</i> por meio do objeto <b><i>sender</i></b></li>
</ul>
<p>
Observe que o BeanShell é digitado à vontade. Portanto, não é necessário declarar as variáveis antes de usá-las – isto torna os scripts um pouco mais concisos do que o Java normal. Mas claro, se quiser definir um modelo você pode.
</p>
<h3>Usando o mapa do Site</h3>
<p>
Vamos começar com algo útil e típico: percorrer todos os nós do site e verificar a existência de um arquivo. Com um script já criado para isso, escolha <i>carregar</i> e selecione o arquivo <i>example.tree.bsh</i>.
</p>
<pre>
import org.apache.commons.httpclient.URI;
import org.parosproxy.paros.network.HttpMessage;
import org.parosproxy.paros.model.*;

Tree () {
	
	find (SiteNode node, String resource) {
		if (node == null) return;
		ref = node.getHistoryReference();
		if ((ref != null) &amp;&amp; (!node.isLeaf())) {
			checkExists(ref, resource);    
		}
		for (i=0;i&lt;node.getChildCount();i++) {   
			try {
				find (node.getChildAt(i), resource);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	checkExists(ref, resource) {
		u = ref.getHttpMessage().getRequestHeader().getURI().toString() + "/" + resource;
		msg = ref.getHttpMessage();
		msg.getRequestHeader().setURI(new URI(u));
		sender.sendAndReceive(msg, true);
		if (msg.getResponseHeader().getStatusCode() == 200) {
			print("Found: "+msg.getRequestHeader().getURI().toString());
		}
	}

	return this;
}
</pre>
<p>
Antes de clicar em avaliar, primeiro navegue até um site através do ZAP para preencher a árvore:
</p>
<p>
Agora clique em avaliar para executar o script no editor. Se não houver nenhum erro, você pode começar usando o objeto definido no script emitindo os seguintes comandos:
</p>
<pre>
t = Tree();
</pre>
<p>
Isso cria um novo objeto de árvore e atribui uma referência para <i>t</i>.
</p>
<pre>
t.find(sites.getRoot(), "index.html");
</pre>
<p>
Chame o método <i>find</i> em t, o que coloca um <i>SiteNode</i> como o primeiro argumento e um recurso para encontrar o segundo. Neste caso, o método irá iterar através de todos os nós na árvore, porque começamos na raiz e irá encontrar arquivos index.html.
</p>
<p>
Em vez de iteração através de todos os nós, também poderíamos começar por um nó específico usando o método <i>findChild</i>.
</p>
<p>
Isso deve dar a você uma idéia do poder do BeanShell no ZAP. Mas para explorá-lo totalmente, você vai precisar para se familiarizar com a API interna e características do BeanShell. O BeanShell tem sido a configurado de modo a permitir o acesso completo a todos os objetos internos e métodos – até mesmo os privados.
</p>
<h3>Simples request de HTTP</h3>
<p>
No próximo exemplo, criamos e enviamos uma solicitação de HTTP diretamente do console:
</p>
<pre>
[ exemplo a ser construído ]
</pre>
<p>
Para utilizar plenamente o poder do BeanShell, você deve se familiarizar com aspectos internos do ZAP. O objeto <i>remetente</i> é a mesma instância usada pelo <a href="man_req.html">Editor de request Manual</a> e, portanto, usará as configurações de proxy estabelecidas na configuração do ZAP.
</p>
<pre>
[ exemplo a ser construído ]
</pre>
<h3>Dicas</h3>
<p>
Use o comando <i>unset(String)</i> para desproteger quaisquer variáveis, métodos ou objetos declarados. Isso é útil se você deseja substituir uma declaração de método no namespace atual. Observe que o comando usa um argumento String, não um objeto, então para remover o objeto <i>t</i> que usamos acima, deve-se escrever: <i>unset("t");</i> e não <i>unset(t);</i>
</p>
<h2>Acessado via</h2>
<table>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="../tlmenu/tools.html">Menu de ferramentas de nível superior</a></td><td>Console 'BeanShell '</td></tr>
</table>

<h2>Leia também</h2>
<table>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="../overview.html">Visão geral da interface do usuário</a></td><td>para uma visão geral da interface do usuário</td></tr>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="dialogs.html">Caixas de diálogo</a></td><td>para obter detalhes das caixas de diálogo ou pop-ups </td></tr>
</table>

</body>
</html>
